package com.ruoyi.common.core.mapper;

import com.ruoyi.common.core.domain.BaseEntity;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 基础 Mapper 接口，定义通用 CRUD 方法
 * @param <T> 实体类泛型
 */
public interface BaseMapper<T> {

    /**
     * 新增实体
     * @param entity 实体对象
     * @return 影响行数
     */
    int insert(T entity);

    /**
     * 根据 ID 更新实体
     * @param entity 实体对象（包含 ID）
     * @return 影响行数
     */
    int updateById(T entity);

    /**
     * 根据 ID 删除实体
     * @param id 主键 ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 根据 ID 查询实体
     * @param id 主键 ID
     * @return 实体对象
     */
    T selectById(Long id);

    /**
     * 查询所有实体
     * @return 实体列表
     */
    List<T> selectAll();

    /**
     * 根据条件查询实体列表
     * @param entity 实体对象（非空字段作为查询条件）
     * @return 实体列表
     */
    List<T> selectList(T entity);

    int deleteBatchIds(List<? extends Serializable> ids);

    <T extends BaseEntity> List<T> selectListByEntity(T entity);

    <T> int insertBatch(List<T> entityList);

    int updateSelectiveById(T entity);

    int deleteByIds(String ids);

    <T> List<T> selectByEntity(T entity);

    <T> List<T> selectByMap(Map<String, Object> params);

    <T> List<T> selectPage(int offset, int pageSize, T entity);

    int selectCount(T entity);
}